using System;
using System.Threading.Tasks;
using System.Collections.Generic;
using admin.application.Dtos;
using admin.core.Common;
using admin.core.Entities.App;

namespace admin.application.Services
{
    public interface IAppUserService
    {
        Task<IEnumerable<UserDto>> GetAllAsync();
        Task<UserDto> GetByIdAsync(Guid id);
        Task<PaginationResult<UserDto>> GetPagedAsync(PaginationRequest request);
        Task CreateAsync(CreateUserDto dto);
        Task UpdateAsync(Guid id, UpdateUserDto dto);
        Task DeleteAsync(Guid id);
        Task EnableAsync(Guid id);
        Task DisableAsync(Guid id);
        Task AssignRoleAsync(Guid userId, Guid roleId);
        Task RemoveRoleAsync(Guid userId, Guid roleId);
        Task ChangePasswordAsync(Guid userId, string oldPwd, string newPwd);
        Task<List<AppRole>> GetUserRolesAsync(Guid userId);
        Task<ContactInfoDto> GetContactInfoAsync(Guid userId);
        Task UpdateContactInfoAsync(Guid userId, string phone, string email);
    }
} 